<?php


use Yaf\Registry;
use models\Business\Account;
use models\Business\SmsCode;

class AccountController extends ApiBaseController
{

    /**
     * @SWG\Get(
     *     path="/v3/account/list",
     *     tags={"用户提现账号信息"},
     *     summary="获取用户提现账号信息列表数据接口",
     *     description="
     * page 必须参数 页码
     * page_size 必须参数 每页显示条数
     * sort 必须参数 排序方式 可选值:desc降序、asc生序
     * order 必须参数 排序字段 固定值 id
     *     ",
     *     @SWG\Parameter(
     *          name="Authorization",
     *          description="Authorization 登录接口返回的jwt字段的值",
     *          in="header",
     *          required=true,
     *          type="string"
     *     ),
     *     @SWG\Parameter(
     *          name="secret",
     *          description="加密字符串",
     *          in="query",
     *          required=true,
     *          type="string"
     *     ),
     *     @SWG\Response(
     *         response="200",
     *         description="请求成功",
     *         @SWG\Schema(type="object", ref="#/definitions/accountListData")
     *     ),
     *     @SWG\Response(
     *         response="400",
     *         description="签名不存在或无效签名"
     *     ),
     *     @SWG\Response(
     *         response="401",
     *         description="jwt无效或过期，需要登录"
     *     ),
     *     @SWG\Response(
     *         response="403",
     *         description="无权访问"
     *     ),
     *     @SWG\Response(
     *         response="404",
     *         description="找不到数据"
     *     )
     * )
     */
    public function listAction() {
        $parameters = Registry::get('parameters');

        $accounts = Account::getAccountList($parameters);

        return $this->_responseJson($accounts);
    }

    /**
     * @SWG\Post(
     *     path="/v3/account/create",
     *     tags={"用户提现账号信息"},
     *     summary="创建用户提现账号信息接口",
     *     description="
     * type 必须参数 类型 0为支付宝,1为微信,2为银行卡，现阶段只提供支付宝,
     * name 必须参数 姓名
     * mobile 必须参数 手机号码
     * code 必须参数 验证码
     * identify 必须参数 身份证号码
     * account 非必须参数 支付宝账号对应的邮箱账号",
     *     @SWG\Parameter(
     *          name="Authorization",
     *          description="Authorization 登录接口返回的jwt字段的值",
     *          in="header",
     *          required=true,
     *          type="string"
     *     ),
     *     @SWG\Parameter(
     *          name="secret",
     *          description="加密字符串",
     *          in="formData",
     *          required=true,
     *          type="string"
     *     ),
     *     @SWG\Response(
     *         response="201",
     *         description="请求成功",
     *         @SWG\Schema(type="object", ref="#/definitions/accountSingleData")
     *     ),
     *     @SWG\Response(
     *         response="422",
     *         description="创建失败"
     *     ),
     *     @SWG\Response(
     *         response="400",
     *         description="签名不存在或无效签名"
     *     ),
     *     @SWG\Response(
     *         response="401",
     *         description="jwt无效或过期，需要登录"
     *     ),
     *     @SWG\Response(
     *         response="403",
     *         description="无权访问"
     *     ),
     *     @SWG\Response(
     *         response="404",
     *         description="找不到数据"
     *     )
     * )
     */
    public function createAction() {
        $parameters = Registry::get('parameters');

        // 验证短信验证码
        if (isset($parameters['code']))
            SmsCode::verifySmsCode($parameters['mobile'], $parameters['code'], $parameters['type'] == 0 ? 'bindalipay' : '');

        $account = Account::createAccount($parameters);

        return $this->_responseJson(['data' => $account]);
    }

    /**
     * @SWG\Put(
     *     path="/v3/account/{id}/edit",
     *     tags={"用户提现账号信息"},
     *     summary="创建用户提现账号信息接口",
     *     description="
     * type 非必须参数 修改类型时必须 0为支付宝,1为微信,2为银行卡，现阶段只提供支付宝,
     * name 非必须参数 修改姓名时必须
     * account 非必须参数 修改支付宝账号时必须
     * mobile 非必须参数 修改手机号码时必须
     * code 必须参数 短信验证码",
     *     @SWG\Parameter(
     *          name="Authorization",
     *          description="Authorization 登录接口返回的jwt字段的值",
     *          in="header",
     *          required=true,
     *          type="string"
     *     ),
     *     @SWG\Parameter(
     *          name="id",
     *          description="/v3/account/list接口返回的id字段的值",
     *          in="path",
     *          required=true,
     *          type="string"
     *     ),
     *     @SWG\Parameter(
     *          name="secret",
     *          description="加密字符串",
     *          in="formData",
     *          required=true,
     *          type="string"
     *     ),
     *     @SWG\Response(
     *         response="201",
     *         description="请求成功",
     *         @SWG\Schema(type="object", ref="#/definitions/accountSingleData")
     *     ),
     *     @SWG\Response(
     *         response="422",
     *         description="创建失败"
     *     ),
     *     @SWG\Response(
     *         response="400",
     *         description="签名不存在或无效签名"
     *     ),
     *     @SWG\Response(
     *         response="401",
     *         description="jwt无效或过期，需要登录"
     *     ),
     *     @SWG\Response(
     *         response="403",
     *         description="无权访问"
     *     ),
     *     @SWG\Response(
     *         response="404",
     *         description="找不到数据"
     *     )
     * )
     */
    public function editAction() {
        $parameters = Registry::get('parameters');

        // 验证短信验证码
        if (isset($parameters['code']))
            SmsCode::verifySmsCode($parameters['mobile'], $parameters['code'], $parameters['type'] == 0 ? 'modifyalipay' : '');

        $account = Account::editAccount($parameters);

        return $this->_responseJson(['data' => $account]);
    }

    /**
     * @SWG\Delete(
     *     path="/v3/account/{id}/delete",
     *     tags={"用户提现账号信息"},
     *     summary="删除用户提现账号信息接口",
     *     description="",
     *     @SWG\Parameter(
     *          name="Authorization",
     *          description="Authorization 登录接口返回的jwt字段的值",
     *          in="header",
     *          required=true,
     *          type="string"
     *     ),
     *     @SWG\Parameter(
     *          name="id",
     *          description="/v3/account/list接口返回的id字段的值",
     *          in="path",
     *          required=true,
     *          type="string"
     *     ),
     *     @SWG\Response(
     *         response="200",
     *         description="删除成功, 没有返回结果"
     *     ),
     *     @SWG\Response(
     *         response="400",
     *         description="签名不存在或无效签名"
     *     ),
     *     @SWG\Response(
     *         response="401",
     *         description="jwt无效或过期，需要登录"
     *     ),
     *     @SWG\Response(
     *         response="403",
     *         description="无权访问"
     *     ),
     *     @SWG\Response(
     *         response="404",
     *         description="找不到数据"
     *     )
     * )
     */
    public function deleteAction() {
        $parameters = Registry::get('parameters');

        Account::deleteAccount($parameters);

        return $this->_responseJson(new stdClass(), '000', '删除成功');

    }

}
